package com.sise.Array;
import java.util.HashMap;
import java.util.Map;

/**
 *      剑指 Offer 50. 第一个只出现一次的字符
 *
 *      在字符串 s 中找出第一个只出现一次的字符。如果没有，返回一个单空格。 s 只包含小写字母。
 *      示例:
 *      s = "abaccdeff"
 *      返回 "b"
 *      s = ""
 *      返回 " "
 */
public class _offer_50_firstUniqChar {
    public char firstUniqChar(String s) {
        char[] chars = s.toCharArray();
        Map<Character, Boolean> map = new HashMap<>();  // 第一次遍历统计为 true 的数值，第二次遍历即找出第一个为 true 的值
        for (Character c : chars){
            map.put(c, !map.containsKey(c));            // 如果 map 中只有一个，那么就为 true，等第二次遍历就将其输出
        }
        for (Character c : chars){                      // 由于这里是根据 chars 顺序进行遍历，这里的 map 只是用来做工具
            if (map.get(c)) return c;                   // 这里使用的是 get 得到 value = true 而不是 containsKey
        }
        return ' ';
    }
}
